home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 January: Mac OS SDK / Dev.CD Jan 97 SDK2.toast / Development Kits (Disc 2) / OpenDoc Development Framework / ODFDev / ODF / Found / FWString / FWCharIt.cpp < prev    next >
Encoding:
Text File  |  1996-09-17  |  14.4 KB  |  418 lines  |  [TEXT/MPS ]

  1. //========================================================================================
  2. //
  3. //    File:                FWCharIt.cpp
  4. //    Release Version:    $ ODF 2 $
  5. //
  6. //    Copyright:    (c) 1993 - 1996 by Apple Computer, Inc., all rights reserved.
  7. //
  8. //========================================================================================
  9.  
  10. #include "FWFound.hpp"
  11.  
  12. #ifndef FWCHARIT_H
  13. #include "FWCharIt.h"
  14. #endif
  15.  
  16. #ifndef SOM_FW_OTextRunReader_xh
  17. #include "SLTxtRun.xh"
  18. #endif
  19.  
  20. #ifndef FWEXCEPT_H
  21. #include "FWExcept.h"
  22. #endif
  23.  
  24. #ifdef FW_BUILD_MAC
  25. #pragma segment Strings
  26. #endif
  27.  
  28. //========================================================================================
  29. //    CLASS FW_CTextReader
  30. //========================================================================================
  31.  
  32. FW_DEFINE_AUTO(FW_CTextReader)
  33.  
  34. //----------------------------------------------------------------------------------------
  35. //    FW_CTextReader::FW_CTextReader
  36. //----------------------------------------------------------------------------------------
  37.  
  38. FW_CTextReader::FW_CTextReader(FW_OTextRunReader* adoptedReader) :
  39.     fRep(NULL),
  40.     fAdoptedReader(adoptedReader)
  41. {
  42.     FW_SOMEnvironment ev;
  43.     fRep = FW_PrivTextReader_New(ev, adoptedReader);
  44.     FW_PrivTextReader_Acquire(fRep, ev);
  45.     FW_END_CONSTRUCTOR
  46. }
  47.  
  48. //----------------------------------------------------------------------------------------
  49. //    FW_CTextReader::FW_CTextReader
  50. //----------------------------------------------------------------------------------------
  51.  
  52. FW_CTextReader::FW_CTextReader(FW_HTextReader rep) :
  53.     fRep(rep),
  54.     fAdoptedReader(NULL)
  55. {
  56.     FW_SOMEnvironment ev;
  57.     FW_PrivTextReader_Acquire(fRep, ev);
  58.     FW_END_CONSTRUCTOR
  59. }
  60.  
  61. //----------------------------------------------------------------------------------------
  62. //    FW_CTextReader::~FW_CTextReader
  63. //----------------------------------------------------------------------------------------
  64.  
  65. FW_CTextReader::~FW_CTextReader()
  66. {
  67.     FW_START_DESTRUCTOR
  68.     FW_SOMEnvironment ev;
  69.     FW_PrivTextReader_Release(fRep, ev);
  70.     delete fAdoptedReader;
  71. }
  72.  
  73. //========================================================================================
  74. //    CLASS FW_CTextWriter
  75. //========================================================================================
  76.  
  77. FW_DEFINE_AUTO(FW_CTextWriter)
  78.  
  79. //----------------------------------------------------------------------------------------
  80. //    FW_CTextWriter::FW_CTextWriter
  81. //----------------------------------------------------------------------------------------
  82.  
  83. FW_CTextWriter::FW_CTextWriter(FW_OTextRunWriter* adoptedWriter) :
  84.     fRep(0),
  85.     fAdoptedWriter(adoptedWriter)
  86. {
  87.     FW_SOMEnvironment ev;
  88.     fRep = FW_PrivTextWriter_New(ev, adoptedWriter);
  89.     FW_PrivTextWriter_Acquire(fRep);
  90.     FW_END_CONSTRUCTOR
  91. }
  92.  
  93. //----------------------------------------------------------------------------------------
  94. //    FW_CTextWriter::FW_CTextWriter
  95. //----------------------------------------------------------------------------------------
  96.  
  97. FW_CTextWriter::FW_CTextWriter(FW_HTextWriter rep) :
  98.     fRep(rep),
  99.     fAdoptedWriter(NULL)
  100. {
  101.     FW_PrivTextWriter_Acquire(fRep);
  102.     FW_END_CONSTRUCTOR
  103. }
  104.  
  105. //----------------------------------------------------------------------------------------
  106. //    FW_CTextWriter::~FW_CTextWriter
  107. //----------------------------------------------------------------------------------------
  108.  
  109. FW_CTextWriter::~FW_CTextWriter()
  110. {
  111.     FW_START_DESTRUCTOR
  112.     FW_SOMEnvironment ev;
  113.     FW_PrivTextWriter_Release(fRep, ev);
  114.     delete fAdoptedWriter;
  115. }
  116.  
  117. //========================================================================================
  118. //    CLASS FW_CMemoryReader
  119. //========================================================================================
  120.  
  121. //----------------------------------------------------------------------------------------
  122. //    FW_CMemoryReader::MakeReader
  123. //----------------------------------------------------------------------------------------
  124.  
  125. FW_OMemoryRunReader* FW_CMemoryReader::MakeReader(char * buffer, FW_ByteCount length, FW_Locale* locale)
  126. {
  127.     FW_SOMEnvironment ev;
  128.     return (new FW_OMemoryRunReader())->InitWithLocale(ev, buffer, length, locale);
  129. }
  130.  
  131. //----------------------------------------------------------------------------------------
  132. //    FW_CMemoryReader::FW_CMemoryReader
  133. //----------------------------------------------------------------------------------------
  134.  
  135. FW_CMemoryReader::FW_CMemoryReader(const char * buffer, FW_ByteCount bytes) :
  136.     FW_CTextReader(MakeReader((char*)buffer, bytes))
  137. {
  138. }
  139.  
  140. //----------------------------------------------------------------------------------------
  141. //    FW_CMemoryReader::~FW_CMemoryReader
  142. //----------------------------------------------------------------------------------------
  143.  
  144. FW_CMemoryReader::~FW_CMemoryReader()
  145. {
  146. }
  147.  
  148. //========================================================================================
  149. //    CLASS FW_CMemoryWriter
  150. //========================================================================================
  151.  
  152. //----------------------------------------------------------------------------------------
  153. //    FW_CMemoryWriter::MakeWriter
  154. //----------------------------------------------------------------------------------------
  155.  
  156. FW_OMemoryRunWriter* FW_CMemoryWriter::MakeWriter(char * buffer, FW_ByteCount capacity)
  157. {
  158.     FW_SOMEnvironment ev;
  159.     return (new FW_OMemoryRunWriter())->Initialize(ev, buffer, capacity);
  160. }
  161.  
  162. //----------------------------------------------------------------------------------------
  163. //    FW_CMemoryWriter::FW_CMemoryWriter
  164. //----------------------------------------------------------------------------------------
  165.  
  166. FW_CMemoryWriter::FW_CMemoryWriter(char* buffer, FW_ByteCount capacity) :
  167.     FW_CTextWriter(MakeWriter(buffer, capacity))
  168. {
  169. }
  170.  
  171. //----------------------------------------------------------------------------------------
  172. //    FW_CMemoryWriter::~FW_CMemoryWriter
  173. //----------------------------------------------------------------------------------------
  174.  
  175. FW_CMemoryWriter::~FW_CMemoryWriter()
  176. {
  177. }
  178.  
  179. //========================================================================================
  180. //    CLASS FW_CTextReader Inline Functions
  181. //========================================================================================
  182.  
  183. //----------------------------------------------------------------------------------------
  184. //    FW_CTextReader::GetCharacterAndAdvance
  185. //----------------------------------------------------------------------------------------
  186.  
  187. FW_LChar FW_CTextReader::GetCharacterAndAdvance()
  188. {
  189.     FW_SOMEnvironment ev;
  190.     return FW_PrivTextReader_GetCharacterAndAdvance(fRep, ev, NULL);
  191. }
  192.  
  193. //----------------------------------------------------------------------------------------
  194. //    FW_CTextReader::GetCharacterAndAdvance
  195. //----------------------------------------------------------------------------------------
  196.  
  197. FW_LChar FW_CTextReader::GetCharacterAndAdvance(FW_ByteCount& bytesInChar)
  198. {
  199.     FW_SOMEnvironment ev;
  200.     return FW_PrivTextReader_GetCharacterAndAdvance(fRep, ev, &bytesInChar);
  201. }
  202.  
  203. //----------------------------------------------------------------------------------------
  204. //    FW_CTextReader::BackupAndGetCharacter
  205. //----------------------------------------------------------------------------------------
  206.  
  207. FW_LChar FW_CTextReader::BackupAndGetCharacter()
  208. {
  209.     FW_SOMEnvironment ev;
  210.     return FW_PrivTextReader_BackupAndGetCharacter(fRep, ev, NULL);
  211. }
  212.  
  213. //----------------------------------------------------------------------------------------
  214. //    FW_CTextReader::BackupAndGetCharacter
  215. //----------------------------------------------------------------------------------------
  216.  
  217. FW_LChar FW_CTextReader::BackupAndGetCharacter(FW_ByteCount& bytesInChar)
  218. {
  219.     FW_SOMEnvironment ev;
  220.     return FW_PrivTextReader_BackupAndGetCharacter(fRep, ev, &bytesInChar);
  221. }
  222.  
  223. //----------------------------------------------------------------------------------------
  224. //    FW_CTextReader::PeekCharacter
  225. //----------------------------------------------------------------------------------------
  226.  
  227. FW_LChar FW_CTextReader::PeekCharacter()
  228. {
  229.     return FW_PrivTextReader_PeekCharacter(fRep, NULL);
  230. }
  231.  
  232. //----------------------------------------------------------------------------------------
  233. //    FW_CTextReader::PeekCharacter
  234. //----------------------------------------------------------------------------------------
  235.  
  236. FW_LChar FW_CTextReader::PeekCharacter(FW_ByteCount& bytesInChar)
  237. {
  238.     return FW_PrivTextReader_PeekCharacter(fRep, &bytesInChar);
  239. }
  240.  
  241. //----------------------------------------------------------------------------------------
  242. //    FW_CTextReader::Advance
  243. //----------------------------------------------------------------------------------------
  244.  
  245. void FW_CTextReader::Advance(FW_ByteCount delta)
  246. {
  247.     FW_SOMEnvironment ev;
  248.     FW_PrivTextReader_Advance(fRep, ev, delta);
  249. }
  250.  
  251. //----------------------------------------------------------------------------------------
  252. //    FW_CTextReader::Backup
  253. //----------------------------------------------------------------------------------------
  254.  
  255. void FW_CTextReader::Backup(FW_ByteCount delta)
  256. {
  257.     FW_SOMEnvironment ev;
  258.     FW_PrivTextReader_Backup(fRep, ev, delta);
  259. }
  260.  
  261. //----------------------------------------------------------------------------------------
  262. //    FW_CTextReader::GetPosition
  263. //----------------------------------------------------------------------------------------
  264.  
  265. FW_ByteCount FW_CTextReader::GetPosition()
  266. {
  267.     return FW_PrivTextReader_GetPosition(fRep);
  268. }
  269.  
  270. //----------------------------------------------------------------------------------------
  271. //    FW_CTextReader::SetPosition
  272. //----------------------------------------------------------------------------------------
  273.  
  274. void FW_CTextReader::SetPosition(FW_ByteCount position)
  275. {
  276.     FW_SOMEnvironment ev;
  277.     FW_PrivTextReader_SetPosition(fRep, ev, position);
  278. }
  279.  
  280. //----------------------------------------------------------------------------------------
  281. //    FW_CTextReader::GetByteLength
  282. //----------------------------------------------------------------------------------------
  283.  
  284. FW_ByteCount FW_CTextReader::GetByteLength()
  285. {
  286.     return FW_PrivTextReader_GetByteLength(fRep);
  287. }
  288.  
  289. //----------------------------------------------------------------------------------------
  290. //    FW_CTextReader::GetLocale
  291. //----------------------------------------------------------------------------------------
  292.  
  293. void FW_CTextReader::GetLocale(FW_Locale& locale) const
  294. {
  295.     FW_PrivTextReader_GetLocale(fRep, &locale);
  296. }
  297.  
  298. //----------------------------------------------------------------------------------------
  299. //    FW_CTextReader::PeekRunAhead
  300. //----------------------------------------------------------------------------------------
  301.  
  302. void FW_CTextReader::PeekRunAhead(const char*& start, FW_ByteCount& length)
  303. {
  304.     FW_PrivTextReader_PeekRunAhead(fRep, &start, &length);
  305. }
  306.  
  307. //----------------------------------------------------------------------------------------
  308. //    FW_CTextReader::PeekRunBehind
  309. //----------------------------------------------------------------------------------------
  310.  
  311. void FW_CTextReader::PeekRunBehind(const char*& end, FW_ByteCount& length)
  312. {
  313.     FW_PrivTextReader_PeekRunBehind(fRep, &end, &length);
  314. }
  315.  
  316. //----------------------------------------------------------------------------------------
  317. //    FW_CTextReader::Advance
  318. //----------------------------------------------------------------------------------------
  319.  
  320. void FW_CTextReader::Advance()
  321. {
  322.     FW_SOMEnvironment ev;
  323.     FW_ByteCount bytesInChar = FW_PrivTextReader_PeekCharacterSize(fRep);
  324.     FW_PrivTextReader_Advance(fRep, ev, bytesInChar);
  325. }
  326.  
  327. //----------------------------------------------------------------------------------------
  328. //    FW_CTextReader::Backup
  329. //----------------------------------------------------------------------------------------
  330.  
  331. void FW_CTextReader::Backup()
  332. {
  333.     FW_SOMEnvironment ev;
  334.     FW_PrivTextReader_BackupAndGetCharacter(fRep, ev, NULL);
  335. }
  336.  
  337. //----------------------------------------------------------------------------------------
  338. //    FW_CTextReader::PeekByte
  339. //----------------------------------------------------------------------------------------
  340.  
  341. const char* FW_CTextReader::PeekByte() const
  342. {
  343.     return FW_PrivTextReader_PeekByte(fRep);
  344. }
  345.  
  346. //========================================================================================
  347. //    CLASS FW_CTextWriter Inline Functions
  348. //========================================================================================
  349.  
  350. //----------------------------------------------------------------------------------------
  351. //    FW_CTextWriter::FlushBuffer
  352. //----------------------------------------------------------------------------------------
  353.  
  354. void FW_CTextWriter::FlushBuffer()
  355. {
  356.     FW_SOMEnvironment ev;
  357.     FW_PrivTextWriter_FlushBuffer(fRep, ev);
  358. }
  359.  
  360. //----------------------------------------------------------------------------------------
  361. //    FW_CTextWriter::PutCharacterAndAdvance
  362. //----------------------------------------------------------------------------------------
  363.  
  364. void FW_CTextWriter::SetBufferSum(FW_ByteCount bufferSum)
  365. {
  366.     FW_PrivTextWriter_SetBufferSum(fRep, bufferSum);
  367. }
  368.  
  369. //----------------------------------------------------------------------------------------
  370. //    FW_CTextWriter::PutCharacterAndAdvance
  371. //----------------------------------------------------------------------------------------
  372.  
  373. void FW_CTextWriter::PutCharacterAndAdvance(FW_LChar character, FW_ByteCount bytesInChar)
  374. {
  375.     FW_SOMEnvironment ev;
  376.     FW_PrivTextWriter_PutCharacterAndAdvance(fRep, ev, character, bytesInChar);
  377. }
  378.  
  379. //----------------------------------------------------------------------------------------
  380. //    FW_CTextWriter::GetPosition
  381. //----------------------------------------------------------------------------------------
  382.  
  383. FW_ByteCount FW_CTextWriter::GetPosition()
  384. {
  385.     FW_SOMEnvironment ev;
  386.     return FW_PrivTextWriter_GetPosition(fRep, ev);
  387. }
  388.  
  389. //----------------------------------------------------------------------------------------
  390. //    FW_CTextWriter::FlushAndGetNextBuffer
  391. //----------------------------------------------------------------------------------------
  392.  
  393. void FW_CTextWriter::FlushAndGetNextBuffer()
  394. {
  395.     FW_SOMEnvironment ev;
  396.     FW_PrivTextWriter_FlushAndGetNextBuffer(fRep, ev);
  397. }
  398.  
  399. //----------------------------------------------------------------------------------------
  400. //    FW_CTextWriter::WritePeek
  401. //----------------------------------------------------------------------------------------
  402.  
  403. void FW_CTextWriter::WritePeek(char*& start, FW_ByteCount& length)
  404. {
  405.     FW_SOMEnvironment ev;
  406.     FW_PrivTextWriter_WritePeek(fRep, ev, &start, &length);
  407. }
  408.  
  409. //----------------------------------------------------------------------------------------
  410. //    FW_CTextWriter::WritePeekAdvance
  411. //----------------------------------------------------------------------------------------
  412.  
  413. void FW_CTextWriter::WritePeekAdvance(char* start, FW_ByteCount bytesWritten)
  414. {
  415.     FW_PrivTextWriter_WritePeekAdvance(fRep, start, bytesWritten);
  416. }
  417.  
  418.